package us.proyecto.canarios.domain;

import java.util.Date;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;


/**
 * Clase que mapea la tabla CONCURSO
 *
 * @author Juan Antonio Mena Sánchez
 *
 */
@Entity
@Table(name = "CONCURSO")
public class Concurso {

	private int idConcurso;
	private Anio Anio;
	private Set<JuezConcurso> jueces;
	private Set<Puntuacion> puntuaciones;
	private Set<PuntuacionGrupo> puntuacionesGrupos;
	private Date fechaInicio;
	private Date fechaFin;
	private String domicilio;
	private String coordenadaX;
	private String coordenadaY;
	private Provincia provincia;
	private Municipio municipio;

	/**
	 * Getter de idConcurso
	 * @return idConcurso String
	 */
	@Id
    @SequenceGenerator(name = "concursoId", sequenceName = "CAN_CON_SEQ", initialValue = 1, allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "concursoId")
    @Column(name = "ID_CONCURSO", nullable = false, precision = 8, scale = 0)
	public int getIdConcurso() {
		return idConcurso;
	}
	/**
	 * Setter de idConcurso
	 * @param idConcurso String
	 */
	public void setIdConcurso(int idConcurso) {
		this.idConcurso = idConcurso;
	}
	/**
	 * Getter de anio
	 * @return anio Anio
	 */
	@ManyToOne(fetch=FetchType.LAZY)
	public Anio getAnio() {
		return Anio;
	}

	/**
	 * Setter de anio
	 * @param anio Anio
	 */
	public void setAnio(Anio anio) {
		Anio = anio;
	}
	/**
	 * @return the fechaInicio
	 */
	@Temporal(TemporalType.DATE)
	@Column(name = "FECHA_INICIO")
	public Date getFechaInicio() {
		return fechaInicio;
	}
	/**
	 * @param fechaInicio the fechaInicio to set
	 */
	public void setFechaInicio(Date fechaInicio) {
		this.fechaInicio = fechaInicio;
	}
	/**
	 * @return the fechaFin
	 */
	@Temporal(TemporalType.DATE)
	@Column(name = "FECHA_FIN")
	public Date getFechaFin() {
		return fechaFin;
	}
	/**
	 * @param fechaFin the fechaFin to set
	 */
	public void setFechaFin(Date fechaFin) {
		this.fechaFin = fechaFin;
	}
	/**
	 * @return the domicilio
	 */
	@Column(name="DOMICILIO", length = 400)
	public String getDomicilio() {
		return domicilio;
	}
	/**
	 * @param domicilio the domicilio to set
	 */
	public void setDomicilio(String domicilio) {
		this.domicilio = domicilio;
	}
	/**
	 * @return the coordenadaX
	 */
	@Column(name="COORD_X", length = 10)
	public String getCoordenadaX() {
		return coordenadaX;
	}
	/**
	 * @param coordenadaX the coordenadaX to set
	 */
	public void setCoordenadaX(String coordenadaX) {
		this.coordenadaX = coordenadaX;
	}
	/**
	 * @return the coordenadaY
	 */
	@Column(name="COORD_Y", length = 10)
	public String getCoordenadaY() {
		return coordenadaY;
	}
	/**
	 * @param coordenadaY the coordenadaY to set
	 */
	public void setCoordenadaY(String coordenadaY) {
		this.coordenadaY = coordenadaY;
	}
	/**
	 * @return the provincia
	 */
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="PROVINCIA")
	public Provincia getProvincia() {
		return provincia;
	}
	/**
	 * @param provincia the provincia to set
	 */
	public void setProvincia(Provincia provincia) {
		this.provincia = provincia;
	}
	/**
	 * @return the municipio
	 */
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="MUNICIPIO")
	public Municipio getMunicipio() {
		return municipio;
	}
	/**
	 * @param municipio the municipio to set
	 */
	public void setMunicipio(Municipio municipio) {
		this.municipio = municipio;
	}
	/**
	 * @return the puntuaciones
	 */
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "concurso")
	public Set<Puntuacion> getPuntuaciones() {
		return puntuaciones;
	}
	/**
	 * @param puntuaciones the puntuaciones to set
	 */
	public void setPuntuaciones(Set<Puntuacion> puntuaciones) {
		this.puntuaciones = puntuaciones;
	}
	/**
	 * @return the puntuacionesGrupos
	 */
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "concurso")
	public Set<PuntuacionGrupo> getPuntuacionesGrupos() {
		return puntuacionesGrupos;
	}
	/**
	 * @param puntuacionesGrupos the puntuacionesGrupos to set
	 */
	public void setPuntuacionesGrupos(Set<PuntuacionGrupo> puntuacionesGrupos) {
		this.puntuacionesGrupos = puntuacionesGrupos;
	}
	/**
	 * @return the jueces
	 */
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "concurso")
	public Set<JuezConcurso> getJueces() {
		return jueces;
	}
	/**
	 * @param jueces the jueces to set
	 */
	public void setJueces(Set<JuezConcurso> jueces) {
		this.jueces = jueces;
	}




}
